﻿using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using System.Web.Security;
using EventPlanner.DAL;
using EventPlanner.Models;
using EventPlanner.ViewModels;
using EventPlanner.Performance;

namespace EventPlanner.Controllers
{
    [CompressFilter(Order = 1)]
    public class InvitacionesController : Controller
    {
        private EventPlannerContext db = new EventPlannerContext();
        
        //
        // GET: /Invitaciones/

        /* EnviarInvitaciones: procedimiento que permite seleccionar contactos a los cuales se les 
         * enviará invitaciones a un evento determinado.*/

        [Authorize]
        public ActionResult EnviarInvitaciones(int id_evento)
        {
            MembershipUser UsuarioActual = Membership.GetUser();
            Cuenta cuenta = db.Cuentas.Find(UsuarioActual.UserName);
            Evento evento = db.Eventos.Find(id_evento);
            if (cuenta.Eventos.Contains(evento))
            {

                var ContactosUsuario = cuenta.Contactos;
                var viewmodel = new List<SeleccionContacto>();

                foreach (var contacto in ContactosUsuario)
                {
                    viewmodel.Add(new SeleccionContacto
                    {
                        Nombre = contacto.Nombre,
                        Telefono = contacto.Telefono,
                        Email = contacto.Email,
                        Seleccionado = false
                    });
                }


                ViewBag.NomEvento = evento.Nombre;

                return View(viewmodel.ToList());
            }
            else
            {
                return RedirectToAction("Mensaje_Acceso_denegado", "Autorizacion", new { msj = "Invitaciones/EnviarInvitaciones/" + id_evento });
            }
        }

        [HttpPost]
        public ActionResult EnviarInvitaciones(int id_evento, string[] selectedContacts)
        {
            Evento evento = db.Eventos.Find(id_evento);

            Correos mail = new Correos();
            
            //Creamos un nuevo Objeto de mensaje
            System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();

            //Direccion de correo electronico a la que queremos enviar el mensaje
            foreach (var c in selectedContacts)
            {
                msg.To.Add(c);
                //Nota: La propiedad To es una colección que permite enviar el mensaje a más de un destinatario
            }
            
            //Asunto
            msg.Subject = "Invitacion al evento: "+evento.Nombre ;

            //Cuerpo del Mensaje
            msg.Body = "Event Planner te invita a participar del evento " + evento.Nombre +"\n\nDescripcion del evento: "+evento.Descripcion+"\n\nLugar del evento: "+evento.Direccion+", "+evento.Ciudad+"\nFecha y hora: "+evento.FechaHora;
            msg.IsBodyHtml = false; //Si no queremos que se envíe como HTML

            //Correo electronico desde la que enviamos el mensaje
            msg.From = new System.Net.Mail.MailAddress("juanvenchi@gmail.com");

            mail.MandarCorreo(msg);

            return RedirectToAction("ListaUsuario", "Evento");
        }

    }
}
